/**
 * Created by Mak on 2017/6/16.
 * 校验规则
 */
export {checkInt, checkNum, checkLgtd, checkLttd, checkIsYear, checkRange, checkTel, checksc,checkisComputed,checkMoblie,CheckIsNullForAreaPc}
/**
 * 正则表达式
 * @type {{}}
 */
const regExp={
  tel:/^\d{7,}$/,//电话
  year:/^[1-2][0-9][0-9][0-9]$/,//年份
  mobile:/^((13[0-9])|(14[5,7,9])|(15([0-3]|[5-9]))|(166)|(17[0,1,3,5,6,7,8])|(18[0-9])|(19[8|9]))\d{8}$/,
}


/**
 * 判断是否为整形
 * @param rule
 * @param value
 * @param callback
 */
function checkInt(rule, value, callback) {
  if(!value || value==''){//未输入
    callback();
  }
  if (typeof(value) == "string" || typeof(value) == "number") {
    if (value % 1 === 0) {
      callback();
    } else {
      callback(new Error('请输入数字'));
    }
  } else {
    callback(new Error('请输入数字'));
  }
}
/**
 * 判断是否为数字
 * @param rule
 * @param value
 * @param callback
 */
function checkNum(rule, value, callback) {
  if (!isNaN(value)) {
    callback();
  } else {
    callback(new Error('请输入数字'));
  }
}
/**
 * 判断经度范围
 * @param rule
 * @param value
 * @param callback
 * @returns {*}
 */
function checkLgtd(rule, value, callback) {
  if (!value) {
    return callback(new Error('请输入一个经度值'));
  }
    if (value < 0 || value > 180) {
      callback(new Error('东经必须在0~180度之间'));
    } else if(value.toString().split(".").length == 2 && value.toString().split(".")[1].length > 6){
      callback(new Error('小数位不超过6位'));
    }else {
      callback();
    }
};
/**
 * 判断纬度范围
 * @param rule
 * @param value
 * @param callback
 * @returns {*}
 */
function checkLttd(rule, value, callback) {
  if (!value) {
    return callback(new Error('请输入一个纬度值'));
  }
  if (value < -90 || value > 90) {
    callback(new Error('北纬必须在0~90度之间'));
  }else if(value.toString().split(".").length == 2 && value.toString().split(".")[1].length > 6){
    callback(new Error('小数位不超过6位'));
  }else {
    callback();
  }
};
/**
 * 判断是否为年份
 * @param rule
 * @param value
 * @param callback
 */
function checkIsYear(rule, value, callback) {
  if(!value || value==''){//未输入
    callback();
  }
  if (!regExp.year.test(value)) {
    callback(new Error('请输入正确的年份'));
  } else {
    callback();
  }
};
/**
 * 检测数字范围
 * @param rule
 * @param value
 * @param callback
 */
function checkRange(rule, value, callback) {
  if(!value || value==''){//未输入
    callback();
  }
  if(isNaN(value)){
    callback(new Error(rule.message));
  }
  let max = rule.max;
  let min = rule.min;
  value = new Number(value)
  if (min <=value && value <= max) {
    callback();
  } else {
    callback(new Error(rule.message));
  }
};
/**
 * 施测项目验证
 * @param rule
 * @param value
 * @param callback
 */
function checksc(rule, value, callback) {
  if (value=='') {
    return callback(new Error('请选择施测项目'));
  }else {
    callback();
  }
};
/**
 * 校验流量计算开关
 * @param rule
 * @param value
 * @param callback
 * @returns {*}
 */
function checkisComputed(rule, value, callback) {
  if (value=='') {
    return callback(new Error('需后台计算流量请打开'));
  }else {
    callback();
  }
};
/**
 * 检查字符的长度
 * @param rule
 * @param value
 * @param callback
 */
function checkLength(rule, value, callback) {
  if(!value || value==''){//未输入
    callback();
  }
  let max = rule.max;
  let min = rule.min;
  value = String(value);
  let len = value.length;
  if (min <=len && len <= max) {
    callback();
  } else {
    callback(new Error(rule.message));
  }
};
/**
 * 校验电话号码
 * 规则：7位以上数字
 * @param rule
 * @param value
 * @param callback
 */
function checkTel(rule, value, callback) {
  if(!value || value==''){//未输入
    callback();
  }
  if (!regExp.tel.test(value)) {
    callback(new Error(rule.message));
  } else {
    callback();
  }
};


function checkMoblie(rule, value, callback) {
  if(!value || value==''){//未输入
    callback();
  }
  if (!regExp.mobile.test(value)) {
    callback(new Error(rule.message));
  } else {
    callback();
  }
};

/**
 * 判断地区
 */
function CheckIsNullForAreaPc(rule, value, callback){
  if (isNullStrict(value[0])) {
    callback(new Error(rule.message));
  } else {
    callback()
  }
};

/**判断是否未定义**/
function isUndefined(T) {
  var res = false;
  if (T == null || T == undefined) {
    res = true;
  }
  return res;
};

/**判断是否为空**/
function isNull(T) {
  var res = false;
  if (isUndefined(T) || T == '') {
    res = true;
  }
  return res;
};

/**严格判断是否为空**/
function isNullStrict(T) {
  var res = false;
  if (isNull(T) || T == 'null' || T == '' || T == 'NULL' || T == 'Null') {
    res = true;
  }
  return res;
}


export function downloadFile2(url, filename) {
  /**
   * 下载文件
   * 原理：通过获取文件内容转译为二进制，传给创建a标签下载
   * @param url  文件地址url
   * @param filename 下载保存的名字
   */
  var downloadFileBya = function (fileName, content) {
    var aLink = document.createElement('a');
    var blob = new Blob([content]);
    var evt = document.createEvent("MouseEvents");
    evt.initEvent("click", true, true);
    if (fileName) {
      aLink.download = fileName;
    }
    aLink.target = "_blank";
    aLink.href = URL.createObjectURL(blob);
    aLink.dispatchEvent(evt);
  }
  // 拿文件的名字
  var fileNameFromHeader = function (disposition) {
    if (disposition) {
      let index = disposition.lastIndexOf("\/");
      return decodeURIComponent(disposition.substring(index + 1, disposition.length));
    }
    return "undefine_file";
  }

  var xhr = new XMLHttpRequest();
  xhr.withCredentials = false;
  xhr.responseType = "blob";
  xhr.open('GET', url, true);
  xhr.onload = function () {
    if (this.status == 200) {
      // var blob = this.response;
      var donwloadName = filename != undefined ? filename : fileNameFromHeader(xhr.responseURL);
      downloadFileBya(donwloadName, xhr.response);
    } else {
      console.error("请求下载文件错误，请求错误码：" + this.status);
      return false;
    }
  }
  xhr.send();
}
